package com.um2.simplexe.serveur.ui.entryPoint;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import com.um2.simplexe.serveur.ui.exec.Methodes;

public class PanneauConfigurationServeur extends JPanel{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public static boolean dejasUnOuvert = false ;
	private static PanneauConfigurationServeur InstanceUnique;
	private static JButton quit = null ;

	
	private PanneauConfigurationServeur(final Methodes ensembleDeFonctions) {
		super() ;
		
		setLayout(new BorderLayout()) ;
		JPanel panneauHaut = new JPanel(new FlowLayout()) ;
		add(panneauHaut,BorderLayout.NORTH) ;
		
		panneauHaut.add(new JLabel("Configuration du serveur")) ;
		
		Box panneauMilieu = Box.createVerticalBox() ;
		add(panneauMilieu,BorderLayout.CENTER) ;
		
		JButton boutonValiderPort = new JButton("Valider et quitter") ;
		final JTextField textePort = new JTextField(""+ensembleDeFonctions.getPortEcoute()) ;
		JPanel textePortLabel = new JPanel(new FlowLayout(FlowLayout.RIGHT)) ;
		textePortLabel.add(new JLabel("Port d ecoute : "));
		textePort.addKeyListener(new KeyListener() {

			public void keyPressed(KeyEvent arg0) {
			}

			public void keyReleased(KeyEvent arg0) {
				try {
					Integer.parseInt(textePort.getText()) ;
					if (textePort.getText().length()>5)
						throw new Exception ("") ;
					textePort.setForeground(Color.RED) ;
				}catch (Exception e) {
						String nouveau = textePort.getText().substring(
								0, 
								textePort.getText().length()-1) ;
						textePort.setText(nouveau) ;
				}	
			}

			public void keyTyped(KeyEvent arg0) {
			}}) ;


		JPanel ligne1 = new JPanel(new GridLayout(0,3)) ;
		ligne1.add(textePortLabel) ;
		ligne1.add(textePort) ;
		ligne1.add(boutonValiderPort) ;
		
		ligne1.setMaximumSize(new Dimension(1000,30)) ;
		
		panneauMilieu.add(ligne1) ;
		
		
		JPanel ligne2 = new JPanel(new GridLayout(0,2)) ;
		final JButton demarrer = new JButton("demarrer") ;
		final JButton arreter = new JButton("arreter") ;
		demarrer.setEnabled(!ensembleDeFonctions.isServeurDemarre()) ;
		arreter.setEnabled(ensembleDeFonctions.isServeurDemarre()) ;
		
		
		ligne2.add(demarrer) ;
		ligne2.add(arreter) ;
		ligne2.setMaximumSize(new Dimension(1000,30)) ;
		
		demarrer.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {
				ensembleDeFonctions.arreterServeur() ;
				ensembleDeFonctions.setPortEcoute(Integer.parseInt(textePort.getText())) ;
				
				Thread ecouteThread = new Thread(ensembleDeFonctions.lancerServeur()) ;
				ecouteThread.start() ;
				
				demarrer.setEnabled(!ensembleDeFonctions.isServeurDemarre()) ;
				arreter.setEnabled(ensembleDeFonctions.isServeurDemarre()) ;
				
				textePort.setForeground(Color.BLACK) ;
			}}) ;
		
		arreter.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {
				ensembleDeFonctions.arreterServeur() ;
				ensembleDeFonctions.setPortEcoute(Integer.parseInt(textePort.getText())) ;
				
				demarrer.setEnabled(!ensembleDeFonctions.isServeurDemarre()) ;
				arreter.setEnabled(ensembleDeFonctions.isServeurDemarre()) ;
			}}) ;
		
		
		
		panneauMilieu.add(ligne2) ;
		
		
		
		
		
		JPanel ligne3 = new JPanel(new GridLayout(0,1)) ;
		final JButton quitter = new JButton("quitter le panneau de configuration") ;
		
		
		ligne3.add(quitter) ;
		ligne3.setMaximumSize(new Dimension(1000,30)) ;
		
		quitter.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {
				ensembleDeFonctions.retirerALaFenetre(ensembleDeFonctions.getCurrentOpenTab()) ;
				quit.setVisible(false) ;
				dejasUnOuvert = false ;
			}}) ;

		panneauMilieu.add(ligne3) ;
		
		
		//// maintenant la barre de menu
		if (quit==null) {
			quit = new JButton("quitter") ;
			quit.addActionListener(new ActionListener() {

				public void actionPerformed(ActionEvent arg0) {
					ensembleDeFonctions.retirerALaFenetre(ensembleDeFonctions.getCurrentOpenTab()) ;
					quit.setVisible(false) ;
					dejasUnOuvert = false ;
				}}) ;
			
			JPanel top = ensembleDeFonctions.getHautDeFenetre() ;
			top.add(quit) ;
		}else{
			quit.setVisible(true) ;
		}
		
		
		dejasUnOuvert = true ;
	}


	public static JPanel getInstanceUnique(Methodes ensembleDeFonctions) {
		if (InstanceUnique==null)
			InstanceUnique = new PanneauConfigurationServeur(ensembleDeFonctions) ;
		quit.setVisible(true) ;
		return InstanceUnique;
	}

	
	
}
